﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Audio;

namespace NAVE_Alice_demo.Cena08.Cena.Objeto
{
    class Nuvens : Objeto
    {
        #region Construtor
        /// <summary>
        /// Construtor
        /// </summary>
        /// <param name="Content">Carregar recursos do content</param>
        public Nuvens(ContentManager Content)
        {
            this.t2d_imagem = Content.Load<Texture2D>("Cena08//Cena//Camada3//Nuvem");
            this.totalFrames = 3;
            for (int indice = 0; indice < totalFrames; indice++)
            {
                if (indice == 0)
                    this.rec_frame.Add(new Rectangle(0, 0, t2d_imagem.Width, t2d_imagem.Height / totalFrames));
                else
                    this.rec_frame.Add(new Rectangle(0, rec_frame[indice - 1].Y + rec_frame[indice - 1].Height, 
                                                     t2d_imagem.Width, t2d_imagem.Height / totalFrames));
            }
            this.v2d_posicao = new Vector2(80, 25);
            this.v2d_tamanho = new Vector2(t2d_imagem.Width, t2d_imagem.Height / totalFrames);

            this.int_tempoAtual = 0;
            this.int_tempoProximoFrame = 130;
            this.frameAtual = 0;

            this.snd_effect = Content.Load<SoundEffect>("Cena08//Cena//Camada3//lua");
        }

        #endregion

        #region Variáveis
        /// <summary>
        /// Variável que verifica se a animção já chegou em seu último frame, para que possa voltar os frames em ordem decrescente
        /// </summary>
        private bool ultimoFrame = false;
        #endregion

        #region Métodos
        /// <summary>
        /// O objeto se anima de uma maneira diferente da que a classe pai foi feita, por isso temos uma função 'override' aqui
        /// </summary>
        /// <param name="gameTime">Tempo de jogo real</param>
        public override void Anime(GameTime gameTime)
        {
            this.bln_fimAnimacao = false;
            
            this.int_tempoAtual += gameTime.ElapsedGameTime.Milliseconds;
            if (int_tempoAtual > int_tempoProximoFrame)
            {
                if (!ultimoFrame)
                {
                    if (frameAtual < rec_frame.Count() - 1)
                        this.frameAtual++;
                    else
                        ultimoFrame = true;
                }
                else
                {
                    if (frameAtual > 0)
                        this.frameAtual--;
                    else
                    {
                        this.bln_fimAnimacao = true;
                        ultimoFrame = false;
                    }
                }
                this.int_tempoAtual = 0;
            }
        }

        #endregion
    }
}
